﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Data.Entity;
using PeliGo.DataModel;

namespace PeliGo.BL
{
    public class EjemplarBL
    {
        private PeliGoEntities1 datacontext;

        public EjemplarBL()
        {
            datacontext = new PeliGoEntities1();
        }
        /*public List<Ejemplar> ListarEjemplar()
        {
            return datacontext.Ejemplar.Where(x => x.Estado == 1).Where(x => x.Stock > 0).ToList();
        }*/
        /*public Ejemplar ObtenerEjemplar(int EjemplarId)
        {
            return datacontext.Ejemplar.FirstOrDefault(x => x.EjemplarId == EjemplarId);
        }*/
        /*public bool EliminarEjemplar(int EjemplarId)
        {
            Ejemplar objEjemplar = ObtenerEjemplar(EjemplarId);

            if (objEjemplar != null)
            {
                objEjemplar.Estado = 0;
                datacontext.SaveChanges();
                return true;
            }

            return false;
        }*/

        public Ejemplar ObtenerEjemplar(int EjemplarId)
        {
            return datacontext.Ejemplar.FirstOrDefault(x => x.Estado == 1 && x.EjemplarId == EjemplarId);
        }

        /*public object ObtenerEjemplar(int EjemplarId)
        {
            return (from e in datacontext.Ejemplar
                    where e.Estado == 1 && e.EjemplarId == EjemplarId
                    select new
                    {
                        EjemplarId = e.EjemplarId,
                        Pelicula = e.Pelicula.NPelicula,
                        Precio = e.PrecioActual,
                        Formato = e.Formato.NFormato
                    });
        }*/

        public IEnumerable<object> BusquedaEjemplar(string pelicula, int genero, int formato)
        {
            if (pelicula.Length == 0)
                return (from e in datacontext.Ejemplar
                        where e.Estado == 1 && e.FormatoId == formato && e.Pelicula.GeneroId == genero
                        select new
                        {
                            EjemplarId = e.EjemplarId,
                            Pelicula = e.Pelicula.NPelicula,
                            Formato = e.Formato.NFormato,
                            Stock = e.Stock,
                            Precio = e.PrecioActual
                        }).ToList();
            else
                return (from e in datacontext.Ejemplar
                        where e.Estado == 1 && e.FormatoId == formato && e.Pelicula.GeneroId == genero && e.Pelicula.NPelicula == pelicula
                        select new
                        {
                            EjemplarId = e.EjemplarId,
                            Pelicula = e.Pelicula.NPelicula,
                            Formato = e.Formato.NFormato,
                            Stock = e.Stock,
                            Precio = e.PrecioActual
                        }).ToList();
        }

        public void AgregarEjemplar(Ejemplar objEjemplar)
        {
            List<Ejemplar> EjemplarExiste = datacontext.Ejemplar.Where(x => x.PeliculaId == objEjemplar.PeliculaId).Where( x=> x.FormatoId == objEjemplar.FormatoId).ToList();
            
            if (EjemplarExiste.Count == 0 )
            {
                datacontext.Ejemplar.Add(objEjemplar);
                datacontext.SaveChanges();
            }
            else
            {
                Ejemplar EjemplarExistente = EjemplarExiste[0];
                EjemplarExistente.Stock = EjemplarExistente.Stock + objEjemplar.Stock;
                datacontext.SaveChanges();
            }
        }

        public void ReducirStock(int EjemplarId, int cantidad)
        {
            Ejemplar EjemplarNow = ObtenerEjemplar(EjemplarId);

            EjemplarNow.Stock = EjemplarNow.Stock - cantidad;
            datacontext.SaveChanges();
        }
        /*public IEnumerable<Ejemplar> DevolverEjemplar()
        {
            return (from t in datacontext.Ejemplar
                    select t);
        }*/
    }
}
